3.12 DataFrame逻辑统计函数学习
前面学习过逻辑运算符&和|,专门应用于逻辑布尔值之间的运算,但布尔值比较多,
就会产生一些问题,pandas和numpy中均有多个布尔值进行与、或运算的函数
逻辑运算方式 | pandas | numpy | 注释 |
---|---|---|---|
逻辑与 | all | np.all | Series中所有的布尔值为Ture,则返回Ture,否则返回False |
逻辑或 | any | np.any | Series中有一个元素布尔值为Ture,则返回Ture,全部为False则返回False |
import pandas as pd
s=pd.Series([ 45,65,78 ])
print ((s[0]> 50 )&(s[ 1 ]> 50 )&(s[ 1 ]> 50 ) )
t=(s> 50 ).all()
print (t)
返回:
False
False
import pandas as pd
s=pd.Series([ 45,65,78 ])
print ((s[0]> 50 )|(s[1]> 50 )|(s[1]> 50 ) )
t=(s> 50 ).any()
print (t)
返回:
True
True
如果布尔值是在DataFrame表格内,使用all()和any()函数对整个表进行逻辑判断统计也是一样的,
但如果要对DateFrame表格中的布尔值按行或列按判断统计,那么就要在函数中使用axis参数来确定方向
import pandas as pd,numpy as np
df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\测试素材.考试成绩.逻辑统计.xlsx" )
df[ "是否达标" ]=np.where((df.iloc[:, 1 :]>95).any( axis = 1 ), "√","Ⅹ" )
arr=np.where((df.iloc[:, 1:4 ]> 80 ).all( axis = 0 ), "√","Ⅹ" )
ts=np.concatenate([np.array([ "是否达标" ]),arr,np.array([""])])
df.loc[ len (df)]=ts
print (df)
返回:
姓名 | 数学 | 语文 | 英语 | 是否达标 | |
---|---|---|---|---|---|
0 | 小明 | 85.5 | 67 | 84 | Ⅹ |
1 | 小张 | 89.0 | 100 | 34 | √ |
2 | 小王 | 95.0 | 55 | 76 | Ⅹ |
3 | 小李 | 88.5 | 95 | 99 | √ |
4 | 小四 | 99.0 | 43 | 73 | √ |
5 | 小管 | 100.0 | 66 | 65 | √ |
6 | 是否达标 | √ | Ⅹ | Ⅹ |